﻿using BLevy.Datos.Repositories;
using BLevy.Entidad;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace BLevy.Negocio
{
    public class Servicios
    {

        public static IList<Servicio> FindAll()
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.FindAll();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int Add(Servicio newEntity)
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.Add(newEntity);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int Remove(int id)
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.Remove(id);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Servicio FindById(int id)
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.FindById(id);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int Modify(Servicio entity)
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.Modify(entity);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int SolicitudServicio(ServicioSocio servicio)
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.SolicitudServicio(servicio);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static IList<ServicioSocio> FindAllSolicitudesConSocioServicio()
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.FindAllSolicitudesConSocioServicio();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static IList<ServicioSocio> FindAllCondicional(string nro_servicio, string nro_cert, DateTime? desde, DateTime? hasta)
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.FindAllCondicional(nro_servicio, nro_cert, desde, hasta);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static ServicioSocio FindByIdConSocioServicio(int id)
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.FindByIdConSocioServicio(id);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static IList<ServicioSocio> FindServiciosByGrupoFamiliar(string grupoFamiliarL)
        {
            try
            {
                IServicioRepository _repository = new ServicioRepository();
                return _repository.FindServiciosByGrupoFamiliar(grupoFamiliarL);
            }
            catch (Exception e)
            {
                throw e;
            }
        }


        public static int ServicioCumplimentado(ServicioSocioCompletado serviciocompletado)
        {
            int resultado = 0;
            bool result = true;

            try
            {
                using(TransactionScope scope = new TransactionScope())
                {
                    IServicioRepository _repository = new ServicioRepository();
                    resultado =  _repository.ServicioCumplimentado(serviciocompletado);

                    if(resultado == 0)
                    {
                        result = false;
                        resultado = 0;
                    }
                    else
                    {
                        int resultadoestado = _repository.CambiarEstadoServicioSocio(serviciocompletado.serviciosocio_id);
                        if(resultadoestado == 0)
                        {
                            result = false;
                            resultado = 0;
                        }
                    }

                    if(result == true)
                    {
                        scope.Complete();
                    }
                }
                
            }
            catch (Exception e)
            {
                throw e;
            }

            return resultado;
        }


        



    }
}
